import axios from 'axios'
import { REQUEST_TIMEOUT, NEED_AUTH, AUTN_HEADER_NAME } from '@/config'
import handleError from '@/utils/handleError'
import loadingTip from '@/native-components/loadingTip'
import { DEV_BASE_API, PROD_BASE_API } from '@/config'

const baseURL = process.env.NODE_ENV === 'production' ? PROD_BASE_API : DEV_BASE_API
const Loading = new loadingTip()

Loading.init()

// 创建一个基础服务
const service = axios.create({
    baseURL,
    timeout: REQUEST_TIMEOUT,
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
})

// 配置请求服务拦截器
service.interceptors.request.use(config => {
    if (NEED_AUTH) {
        const token = '' // TODO 获取正确token
        config.headers[AUTN_HEADER_NAME] = token
    }
    return config
}, error => handleError({
    errorType: 'net',
    errorMsg: error
}))

// 配置返回拦截器，预处理接口返回数据
service.interceptors.response.use(response => {
    const res = response.data
    if (res.status !== 200) { // 处理请求状态码，当返回码不为 200 时判断错误类型
        // TODO 处理请求状态码404、502、304等
    }
    console.log(response)
    if (res.resultCode !== 1) { // 处理接口返回码，当返回码不为 1 时判断错误类型
        return handleError({
            errorType: 'server',
            errorCode: res.resultCode,
        })
    }
    return Promise.resolve(res)
}, error => handleError({
    errorType: 'net',
    errorMsg: error
}))

export default (config) => service(config)
